#ifndef POCS2DPC_H
#define POCS2DPC_H

#include "includes2DPC.h"
#include "ScanData2DPC.h"

float atan3(float y,float x);
float ShiftPosition(float);
float DetectorPosition(float , float, float, float );

float DFint(const ScanData& , const std::vector<std::vector<float> >&  , int , float );
float Fint(const ScanData&  , int , float );
void P1hilbert(ScanData&, int );
void P1hilbert_perp(ScanData&, int );
void P2compact(ScanData& , int);
void P2compact_perp(ScanData& , int);
void P3apriori(ScanData& , int);
void P3apriori_perp(ScanData& , int);
void P5nonneg(ScanData& , int);
void P5nonneg_perp(ScanData& , int);
void backproj(ScanData&);
void prepare(ScanData& );
void backproj_perp(ScanData&);
void prepare_perp(ScanData& );

float IndexPosition( const ScanData& , const int );
int PositionIndex(const ScanData&, const float, bool);
bool isMissing(const ScanData& , const float);
bool isHilbertKnown(const ScanData&, float , float );
void project(ScanData&, const std::vector<std::vector<float> >&, float&, int, int, float, float, bool);
#endif
